package com.java214.elec.dao.entityDao.impl;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;

import com.java214.elec.dao.entityDao.IElecSystemDDLDao;
import com.java214.elec.dao.impl.CommonDaoImpl;
import com.java214.elec.entity.ElecSystemDDL;

@Repository(IElecSystemDDLDao.SERVICE_NAME)
public class IElecSystemDDLDaoImpl extends CommonDaoImpl<ElecSystemDDL> implements IElecSystemDDLDao {

	/**  
	* @Name: findDistinctKeywod
	* @Description: 获取去掉重复值的数据类型
	* @Author: 滕一帆（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2019-11-14（创建日期）
	* @Parameters: 无
	* @Return: List<ElecSystemDDL>：封装数据类型的集合
	*/
	@Override
	public List<ElecSystemDDL> findDistinctKeywod() {
		// TODO Auto-generated method stub
		//结果列表
		List<ElecSystemDDL> sysList = new ArrayList<ElecSystemDDL>();

		//通过hql手写sql查询获取去重复的值
		String hql = "SELECT DISTINCT new com.java214.elec.entity.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";
		sysList = this.getHibernateTemplate().find(hql);
		return sysList;
	}

	/**  
	* @Name: findDdlNameByKeywordAndDdlCode
	* @Description: 使用数据类型和数据项的编号获取数据项的值
	* @Author: 滕一帆（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2019-11-14（创建日期）
	* @Parameters: String keyword：数据类型
	*              String ddlCode：数据项的编号
	* @Return: String数据项的值
	*/
	@SuppressWarnings("unchecked")
	@Override
	public String findDdlNameByKeywordAndDdlCode(final String keyword,final  String ddlCode) {
		// TODO Auto-generated method stub
		final String hql = "select o.ddlName from ElecSystemDDL o where o.keyword = ? and o.ddlCode= ?";
		//hibernate匿名函数查询，开启二级缓存
		List<Object> list=this.getHibernateTemplate().execute(new HibernateCallback(){
			
			
			public Object doInHibernate(Session session) throws HibernateException,SQLException{
				Query query=session.createQuery(hql);
				query.setParameter(0, keyword);
				query.setParameter(1, Integer.parseInt(ddlCode));
				query.setCacheable(true);
				return query.list();
				
			}
		});
		//数据项的值
		String ddlName="";
		if(list!=null && list.size()>0){
			Object o=list.get(0);
			ddlName=o.toString();
		}
		return ddlName;
	}

	/**  
	* @Name: findDdlCodeByKeywordAndDdlName
	* @Description: 使用数据类型和数据项的值获取数据项的编号
	* @Author: 滕一帆（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2019-11-14（创建日期）
	* @Parameters: String keyword：数据类型
	*              String ddlName：数据项的值
	* @Return: String数据项的编号
	*/
	@SuppressWarnings("unchecked")
	@Override
	public String findDdlCodeByKeywordAndDdlName(final String keyword, final String ddlName) {
		final String hql = "select o.ddlCode from ElecSystemDDL o where o.keyword = ? and o.ddlName = ?";
		List<Object> list = this.getHibernateTemplate().execute(new HibernateCallback() {

			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery(hql);
				query.setParameter(0, keyword);
				query.setParameter(1, ddlName);
				query.setCacheable(true);//开启二级缓存
				return query.list();
			}
			
		});
		//数据项的值
		String ddlCode = "";
		if(list!=null && list.size()>0){
			Object o = list.get(0);
			ddlCode = o.toString();
		}
		return ddlCode;
	}





}
